<?php

class ReporteController extends Zend_Controller_Action{

    public function init(){
        $this->em = Zend_Registry::getInstance()->entitymanager;
    }

    public function indexAction(){
         X\Permiso::paraAction('Listar.Reporte');
        $facultades = $this->em->createQueryBuilder()
                               ->select    ('f.idFacultad')
                               ->addselect ('f.nombre')
                               ->from      ('Default_Model_Facultad', 'f')
                               ->orderBy   ('f.nombre', 'asc')
                               ->getQuery  ()
                               ->execute   ();

        $this->view->facultades = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($facultades),
            "rows"    => $facultades
        ));

        $carreras = $this->em->createQueryBuilder()
                              ->select    ('c.idCarrera')
                              ->addselect ('c.nombre')
                              ->addselect ('c.duracionHora')
                              ->from      ('Default_Model_Carrera', 'c')
                              ->orderBy   ('c.nombre', 'asc')
                              ->getQuery  ()
                              ->execute   ();

        //Agregar al array un elemento para la opcion Todas las carreras
        $add = array('idCarrera'=>0, 'nombre'=>'Todas');
        array_unshift($carreras, $add);

        $this->view->carreras = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($carreras),
            "rows"    => $carreras
        ));

        $user = X\Session::getIdUsuario();

        $profesores = $this->em->createQueryBuilder()
                           ->select    ('p.idProfesor')
                           ->addselect ('p.codigoTarjeta')
                           ->addselect ('u.nombre')
                           ->addselect ('u.apellido')
                           ->from      ('Default_Model_Profesor', 'p')
                           ->join      ('p.usuario', 'u')
                           ->where     ("u.idUsuario='".$user."'")
                           ->orderBy   ('u.apellido', 'asc')
                           ->getQuery  ()
                           ->execute   ();

        $this->view->profesores = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($profesores),
            "rows"    => $profesores
        ));

    }

    public function ajaxGenerarAction(){
         X\Permiso::paraAction('Generar.Reporte');
        $profesor = $this->_request->getPost('profesor');
        $semestre = $this->_request->getPost('semestre');
        $carrera  = $this->_request->getPost('carrera');
        $desde    = $this->_request->getPost('desde');
        $hasta    = $this->_request->getPost('hasta');

        if ($semestre=='-')
            $whereSemestre = "1=1";
        else
            $whereSemestre = "cm.semestre='".$semestre."'";

        if ($carrera==0)
            $whereCarrera = "1=1";
        else
            $whereCarrera = "cm.carrera='".$carrera."'";
            

        $infoProfesor = $this->em->createQueryBuilder()
                           ->select    ('u.nombre')
                           ->addselect ('u.apellido')
                           ->from      ('Default_Model_Profesor', 'p')
                           ->join      ('p.usuario', 'u')
                           ->where     ("p.codigoTarjeta='".$profesor."'")
                           ->getQuery  ()
                           ->execute   ();

        $nombreProf = $infoProfesor[0]['nombre'];
        $apellidoProf = $infoProfesor[0]['apellido'];

        //crear QueryBuilder
        $qb = $this->em->createQueryBuilder();

        $marcaciones = $qb->select    ('h.fecha')
                          ->addSelect ('h.tipo')
                          ->addSelect ('h.entrada_salida')
                          ->from      ('Default_Model_HorarioDia', 'h')
                          ->where     ("h.id_empleado='".$profesor."'")
                          ->andWhere  ($qb->expr()->between('h.fecha', "'".$desde."'", "'".$hasta."'"))
                          ->getQuery  ()
                          ->execute   ();

        $data = array ('fecha' => '','dia' => '','entrada' => '','salida' => '');
        $dataSet = array();
        list($date, $month, $year) = explode("/", $desde);
        $fechaAux = $year."-".$month."-".$date;
        $fechaActual = date('Y-m-d', strtotime($fechaAux) - 86400);
        $marcaEntrada = false;
        $marcaSalida = false;
          
         foreach ($marcaciones as $marca){
            //Para eliminar inconsistencias con timezone (en lector de tarjetas guarda con TZ)
            //$marca['entrada_salida'][10]='4';
            //Marcacion en un mismo dia, luego de marcar salida
            if($marca['fecha'] == $fechaActual){
                if($marcaSalida){
                    //Si es salida, se actualiza la hora de salida
                    if($marca['tipo']=='SALIDA'){
                        $data['salida']=date('H:i:s', strtotime($marca['entrada_salida']));

                    }else{ //Si es entrada, se agrega la marcacion anterior y se inicializa una nueva
                        array_push($dataSet, $data);
                        $marcaSalida=false;
                        unset($data);
                        $data = array ('fecha' => '','dia' => '','entrada' => '','salida' => '');
                        $data['fecha'] = $fechaActual;
                        $data['dia'] = date('N', strtotime($marca['fecha']));
                        $data['entrada'] = date('H:i:s', strtotime($marca['entrada_salida']));
                        $marcaEntrada = true;
                    }
                }
                elseif($marca['tipo']=='ENTRADA' && !$marcaEntrada){
                    $marcaSalida=false;
                    unset($data);
                    $data = array ('fecha' => '','dia' => '','entrada' => '','salida' => '');
                    $data['fecha'] = $fechaActual;
                    $data['dia'] = date('N', strtotime($marca['fecha']));
                    $data['entrada'] = date('H:i:s', strtotime($marca['entrada_salida']));
                    $marcaEntrada = true;
                }

            }
            //Nuevo dia
            if($marca['fecha']!=$fechaActual){
                //La salida del dia anterior fue la ultima, se agrega la marcacion
                if($marcaEntrada && $marcaSalida){
                    array_push($dataSet, $data);
                    $marcaSalida=false;
                }
                $marcaEntrada=false;
                $fechaActual=$marca['fecha'];
                if($marca['tipo']=='ENTRADA'){
                    unset($data);
                    $data = array ('fecha' => '','dia' => '','entrada' => '','salida' => '');
                    $data['fecha'] = $fechaActual;
                    $data['dia'] = date('N', strtotime($marca['fecha']));
                    $data['entrada'] = date('H:i:s', strtotime($marca['entrada_salida']));
                    $marcaEntrada = true;
                }
            }
            //Marcacion de salida, puede no ser la ultima
            if($marca['fecha']==$fechaActual && $marca['tipo']=='SALIDA' && $marcaEntrada){
                $data['salida']=date('H:i:s', strtotime($marca['entrada_salida']));
                $marcaSalida = true;
            }
        }
        //Se agrega la ultima marcacion correcta
        if($marcaEntrada && $marcaSalida){
            array_push($dataSet, $data);
        }

        //Traer cursos validos del profesor, durante el periodo especificado
        $qb = $this->em->createQueryBuilder();

        $cursos = $qb->select    ('c.idCurso')
                     ->addSelect ('c.validoDesde')
                     ->addSelect ('c.validoHasta')
                     ->addSelect ('p.idProfesor')
                     ->addSelect ('d.dia')
                     ->addSelect ('d.horaInicio')
                     ->addSelect ('d.horaFin')
                     ->addSelect ('d.duracionHoras')
                     ->addSelect ('m.idMateria')
                     ->addSelect ('m.nombre')
                     ->addSelect ('ca.duracionHora')
                     ->from      ('Default_Model_Curso', 'c')
                     ->join      ('c.carreraMateria', 'cm')
                     ->join      ('c.responsables', 'r')
                     ->join      ('c.detalles', 'd')
                     ->join      ('r.profesor', 'p')
                     ->join      ('cm.materia', 'm')
                     ->join      ('cm.carrera', 'ca')
                     ->where     ($whereCarrera)
                     ->andWhere  ($whereSemestre)
                     ->andWhere  ("p.codigoTarjeta='".$profesor."'")
                     ->andWhere  ('r.marca= true')
                     ->andWhere  ("c.validoDesde<='".$desde."' AND c.validoHasta>='".$desde."' OR
                                   c.validoDesde<='".$hasta."' AND c.validoHasta>='".$hasta."'")
                     ->orderBy   ('m.nombre', 'asc')
                     ->orderBy   ('c.validoDesde', 'asc')
                     ->orderBy   ('d.dia', 'asc')
                     ->getQuery ()
                     ->execute  ();
        // Luego para cada curso ajustar la validez segun el rango seleccionado
        /*$desde = date('d/m/Y', strtotime($desde));
        $cotaDesde = date('Y-m-d', strtotime($desde));
        $hasta = date('d/m/Y', strtotime($hasta));
        $cotaHasta = date('Y-m-d', strtotime($hasta));*/

        list($date, $month, $year) = explode("/", $desde);
        $cotaDesde = $year."-".$month."-".$date;
        list($date, $month, $year) = explode("/", $hasta);
        $cotaHasta = $year."-".$month."-".$date;

        foreach ($cursos as &$curso) {
            if($curso['validoDesde'] < $cotaDesde)
                $curso['validoDesde'] = $cotaDesde;
            if($curso['validoHasta'] > $cotaHasta)
                $curso['validoHasta'] = $cotaHasta;
        }
        unset($curso);


        /*echo "\n";
        var_dump($cursos);
        echo "\n";
        var_dump($dataSet);
        echo "\n";
        */

        /*
        //Fecha para iterar durante el periodo del reporte
        $fechaActual = $cotaDesde;
        //Nos colocamos al inicio de las marcaciones
        $marcacion = reset($dataSet);
        //Arreglos para guardar los registros
        $reportes = array();

        while ($fechaActual <= $cotaHasta) {
            //echo $fechaActual."\n";
            foreach($cursos as $curso){
                $pushRegister = false;
                if($fechaActual >= $curso['validoDesde'] && $fechaActual <= $curso['validoHasta']){
                    $dia = date ('N', strtotime($fechaActual));
                    if($dia == $curso['dia']){
                        //Registro para guardar datos de marcaciones relacionada al curso
                        $registro = array ( 'materia' => '', 'fecha'  => '', 'inicio' => '', 'fin'   => '',
                                            'entrada' => '', 'salida' => '', 'tiene'  => '', 'hizo'  => '');
                        if($fechaActual == $marcacion['fecha']){
                            // (+/-) 10 minutes, para indicar los minutos de tolerancia
                            $inicioTolerable = date("H:i:s", strtotime("+10 minutes", strtotime($curso['horaInicio'])));
                            $finTolerable = date("H:i:s", strtotime("-10 minutes", strtotime($curso['horaFin'])));
                            // Si la clase esta totalmente entre las marcaciones
                            if($inicioTolerable >= $marcacion['entrada'] && $finTolerable <= $marcacion['salida']){
                                //echo ' MARCO '.$fechaActual.' '.$curso['horaInicio'];
                                //echo ' '.$curso['horaFin'].' '.$curso['duracionHoras']."\n";
                                $registro['materia'] = $curso['nombre'];
                                $registro['fecha']   = $fechaActual;
                                $registro['inicio']  = $curso['horaInicio'];
                                $registro['fin']     = $curso['horaFin'];
                                $registro['entrada'] = $curso['horaInicio'];
                                $registro['salida']  = $curso['horaFin'];
                                $registro['tiene']   = $curso['duracionHoras'];
                                $registro['hizo']    = $curso['duracionHoras'];
                                $pushRegister = true;
                            }
                            //caso contrario, definir horario de entrada y salida para la clase
                            else{
                                //echo 'CURSO '.$fechaActual.' '.$curso['horaInicio'];
                                //echo ' '.$curso['horaFin'].' '.$curso['duracionHoras']." | ";
                                //echo 'MARACION '.$marcacion['entrada'].' '.$marcacion['salida']."\n";
                                $horaEntrada = date("H:i:s", strtotime("00:00:00"));
                                $horaSalida  = date("H:i:s", strtotime("00:00:00"));
                                //$horas=0;
                                if($marcacion['entrada']>=$curso['horaInicio'] && $marcacion['entrada']<$curso['horaFin']){
                                    $horaEntrada = $marcacion['entrada'];
                                }elseif(($marcacion['entrada']<=$curso['horaInicio'])&&($marcacion['salida']>$curso['horaInicio'])){
                                    $horaEntrada = $curso['horaInicio'];
                                }

                                if($marcacion['salida']>$curso['horaInicio'] && $marcacion['salida']<=$curso['horaFin']){
                                    $horaSalida = $marcacion['salida'];
                                }elseif(($marcacion['salida']>=$curso['horaFin'])&&($marcacion['entrada']<$curso['horaFin'])){
                                    $horaSalida = $curso['horaFin'];
                                }
                                //if(($marcacion['entrada']>$curso['horaFin'])||($marcacion['salida']<$curso['horaEntrada'])){
                                    //$horaEntrada = date("H:i:s", strtotime("00:00:00"));
                                    //$horaSalida  = date("H:i:s", strtotime("00:00:00"));
                                //}
                                $horas = floor(((strtotime($horaSalida) - strtotime($horaEntrada))/60)/$curso['duracionHora']);
                                //echo ' MARCO '.$fechaActual.' '.$horaEntrada.' '.$horaSalida;
                                //echo ' '.$horas."\n";
                                $marcacion = next($dataSet);
                                if($fechaActual < $marcacion['fecha']){
                                    $registro['materia'] = $curso['nombre'];
                                    $registro['fecha']   = $fechaActual;
                                    $registro['inicio']  = $curso['horaInicio'];
                                    $registro['fin']     = $curso['horaFin'];
                                    $registro['entrada'] = $horaEntrada;
                                    $registro['salida']  = $horaSalida;
                                    $registro['tiene']   = $curso['duracionHoras'];
                                    $registro['hizo']    = $horas;
                                    $pushRegister = true;
                                }
                                $marcacion = prev($dataSet);
                            }
                        }
                        //Si no existe marcacion en la fecha del curso, estuvo ausente
                        else{
                            //echo ' NO MARCO '.$fechaActual.' '."\n";
                            $registro['materia'] = $curso['nombre'];
                            $registro['fecha']   = $fechaActual;
                            $registro['inicio']  = $curso['horaInicio'];
                            $registro['fin']     = $curso['horaFin'];
                            $registro['entrada'] = '00:00:00';
                            $registro['salida']  = '00:00:00';
                            $registro['tiene']   = $curso['duracionHoras'];
                            $registro['hizo']   = 0;
                            $pushRegister = true;
                        }
                        if($pushRegister)
                            array_push($reportes, $registro);
                        unset($registro);
                    }
                }
            }
            $fechaActual = date ("Y-m-d", strtotime("+1 day", strtotime($fechaActual)));
            if($fechaActual > $marcacion['fecha']){
                $marcacion = next($dataSet);
                $fechaAyer = date ("Y-m-d", strtotime("-1 day", strtotime($fechaActual)));
                if($fechaAyer == $marcacion['fecha']){
                    $fechaActual = $fechaAyer;
                }
            }
        }*/

        $reportes = array();
	foreach($cursos as $curso){
            $fechaActual = $cotaDesde;
            $marcacion   = reset($dataSet);
            while ($fechaActual <= $cotaHasta) {
                $pushRegister = false;
                if($fechaActual >= $curso['validoDesde'] && $fechaActual <= $curso['validoHasta']){
                    $dia = date ('N', strtotime($fechaActual));
                    $debeMarcar = false;
                    if($dia == $curso['dia']){
                        $debeMarcar = true;
                        $asistio    = false;
                        $registro = array ( 'materia' => '', 'fecha'  => '', 'inicio' => '', 'fin'   => '',
                                            'entrada' => '', 'salida' => '', 'tiene'  => '', 'hizo'  => '');
                        if($fechaActual == $marcacion['fecha']){
                            // (+/-) 10 minutes, para indicar los minutos de tolerancia
                            $inicioTolerable = date("H:i:s", strtotime("+10 minutes", strtotime($curso['horaInicio'])));
                            $finTolerable = date("H:i:s", strtotime("-10 minutes", strtotime($curso['horaFin'])));
                            while($fechaActual == $marcacion['fecha']){
                                if(!$asistio){
                                    if($inicioTolerable >= $marcacion['entrada'] && $finTolerable <= $marcacion['salida']){
                                        //echo ' MARCO '.$fechaActual.' '.$curso['horaInicio'];
                                        //echo ' '.$curso['horaFin'].' '.$curso['duracionHoras']."\n";
                                        $registro['materia'] = $curso['nombre'];
                                        $registro['fecha']   = $fechaActual;
                                        $registro['inicio']  = $curso['horaInicio'];
                                        $registro['fin']     = $curso['horaFin'];
                                        $registro['entrada'] = $curso['horaInicio'];
                                        $registro['salida']  = $curso['horaFin'];
                                        $registro['tiene']   = $curso['duracionHoras'];
                                        $registro['hizo']    = $curso['duracionHoras'];
                                        $pushRegister = true;
                                        $asistio = true;
                                    }else{
                                        $horaEntrada = date("H:i:s", strtotime("00:00:00"));
                                        $horaSalida  = date("H:i:s", strtotime("00:00:00"));
                                        $entradaValida = false;
                                        $salidaValida  = false;
                                        if($marcacion['entrada']>=$curso['horaInicio'] && $marcacion['entrada']<$curso['horaFin']){
                                            $horaEntrada = $marcacion['entrada'];
                                            $entradaValida = true;
                                        }elseif(($marcacion['entrada']<=$curso['horaInicio'])&&($marcacion['salida']>$curso['horaInicio'])){
                                            $horaEntrada = $curso['horaInicio'];
                                            $entradaValida = true;
                                        }

                                        if($marcacion['salida']>$curso['horaInicio'] && $marcacion['salida']<=$curso['horaFin']){
                                            $horaSalida = $marcacion['salida'];
                                            $salidaValida = true;
                                        }elseif(($marcacion['salida']>=$curso['horaFin'])&&($marcacion['entrada']<$curso['horaFin'])){
                                            $horaSalida = $curso['horaFin'];
                                            $salidaValida = true;
                                        }

                                        if($entradaValida && $salidaValida){
                                            $horas = round((((strtotime($horaSalida) - strtotime($horaEntrada))/60)/$curso['duracionHora'])*10)/10;
                                            $registro['materia'] = $curso['nombre'];
                                            $registro['fecha']   = $fechaActual;
                                            $registro['inicio']  = $curso['horaInicio'];
                                            $registro['fin']     = $curso['horaFin'];
                                            $registro['entrada'] = $horaEntrada;
                                            $registro['salida']  = $horaSalida;
                                            $registro['tiene']   = $curso['duracionHoras'];
                                            $registro['hizo']    = $horas;
                                            $pushRegister = true;
                                            $asistio = true;
                                        }
                                    }
                                }
                                $marcacion=next($dataSet);
                            }
                            $marcacion=prev($dataSet);
                            if(!$asistio){
                                $registro['materia'] = $curso['nombre'];
                                $registro['fecha']   = $fechaActual;
                                $registro['inicio']  = $curso['horaInicio'];
                                $registro['fin']     = $curso['horaFin'];
                                $registro['entrada'] = $horaEntrada;
                                $registro['salida']  = $horaSalida;
                                $registro['tiene']   = $curso['duracionHoras'];
                                $registro['hizo']    = 0;
                                $pushRegister = true;
                            }
                        }
                        if($debeMarcar && !$asistio){
                            $registro['materia'] = $curso['nombre'];
                            $registro['fecha']   = $fechaActual;
                            $registro['inicio']  = $curso['horaInicio'];
                            $registro['fin']     = $curso['horaFin'];
                            $registro['entrada'] = "00:00:00";
                            $registro['salida']  = "00:00:00";
                            $registro['tiene']   = $curso['duracionHoras'];
                            $registro['hizo']    = 0;
                            $pushRegister = true;
                        }
                        if($pushRegister){
                            array_push($reportes, $registro);
                        }
                        unset($registro);
                    }
                }
                $fechaActual = date ("Y-m-d", strtotime("+1 day", strtotime($fechaActual)));
                if($fechaActual > $marcacion['fecha']){
                    $marcacion = next($dataSet);
                    $fechaAyer = date ("Y-m-d", strtotime("-1 day", strtotime($fechaActual)));
                    if($fechaAyer == $marcacion['fecha']){
                        $fechaActual = $fechaAyer;
                    }
                }
            }
	}

        /*echo "MARCACIONES\n";
        foreach ($dataSet as $row){
            echo $row['fecha'].' '.$row['dia'].' '.$row['entrada'].' '.$row['salida']."\n";
        }
        unset($row);
        /*echo "CURSOS\n";
        foreach ($cursos as $row){
            echo $row['dia'].' '.$row['horaInicio'].' '.$row['horaFin'].' '.$row['duracionHoras']."\n";
        }
        unset($row);*/

        //Ordenar $reportes por materia y fecha
        foreach ($reportes as $key => $row) {
            $reporteMateria[$key] = $row['materia'];
            $reporteFecha[$key]   = $row['fecha'];
        }
        array_multisort($reporteMateria, SORT_ASC, $reporteFecha, SORT_ASC, $reportes);

        $nombreProfesor = $apellidoProf.', '.$nombreProf;
        //$desde = date('d/m/Y', strtotime($desde));
        //$hasta = date('d/m/Y', strtotime($hasta));
        $materia = $reportes[0]['materia'];

        //Generar reporte
        //Crear PDF
        $pdf = new Zend_Pdf();
        //Crear pagina
        $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4); //':595:842'
        //Definir fuentes
        $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
        $font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);

        $page->setFont($font2, 10)
             ->drawText('REPORTE DE ASISTENCIA DE PROFESORES', 40, 800)
             ->drawText('Docente', 40, 785)
             ->drawText('Desde', 40, 770)
             ->drawText('Hasta', 40, 755)
             ->drawText(':', 83, 785)
             ->drawText(':', 83, 770)
             ->drawText(':', 83, 755);

        $page->setFont($font, 10)
             ->drawText("$nombreProfesor", 90, 785, 'UTF-8')
             ->drawText("$desde", 90, 770)
             ->drawText("$hasta", 90, 755);

        /*$image = \Zend_Pdf_Image::imageWithPath('img/logoUCA.png');
        $page->drawImage($image, 20, 740, ($image->getPixelWidth()+20), (740+$image->getPixelHeight()));*/
        $page->setLineColor(new \Zend_Pdf_Color_Rgb(0,0,0))
             ->drawLine(40, 745, ($page->getWidth()-40), 745)
             ->drawLine(40, 725, ($page->getWidth()-40), 725)
             ->drawLine(40, 712, ($page->getWidth()-40), 712);

        $page->setFont($font2, 10)
             ->drawText(strtoupper($materia), 40 , 730, 'UTF-8');

        $page->setFont($font, 10)
             ->drawText('Fecha'        , 40, 715)
             ->drawText('Inicio'       , 110, 715)
             ->drawText('Fin'          , 170, 715)
             ->drawText('Entrada'      , 230, 715)
             ->drawText('Salida'       , 290, 715)
             //->drawText('Horas cátedra', 350, 715, 'UTF-8');
             ->drawText('Horas programadas', 350, 715)
             ->drawText('Horas cumplidas'  , 455, 715);


        //Agregar pagina al pdf
        $pdf->pages[] = $page;

        $currentPage = 1;
        $yPoint = 700;
        $totalCumplidas   = 0;
        $totalProgramadas = 0;
        $obs = false;

        foreach ($reportes as $reporte){
            if(strcmp($materia, $reporte['materia'])!=0){
                $materia = $reporte['materia'];

                $page->setLineColor(new \Zend_Pdf_Color_Rgb(0,0,0))
                     ->drawLine(40, $yPoint+5, ($page->getWidth()-40), $yPoint+5)
                     ->drawLine(40, $yPoint-8, ($page->getWidth()-40), $yPoint-8);

                $page->setFont($font2, 10)
                     ->drawText('TOTAL DE HORAS CATEDRA : ', 40, $yPoint-5)
                     ->drawText($totalProgramadas  , 350, $yPoint-5)
                     ->drawText($totalCumplidas    , 455, $yPoint-5);
                $yPoint = $yPoint-20;
                $totalCumplidas   = 0;
                $totalProgramadas = 0;

                if($yPoint < 120){
                    $yPoint = 89;
                }else{
                    $yPoint = $yPoint-5;
                    $page->setFont($font2, 10)
                         ->drawText(strtoupper($materia), 40 , $yPoint, 'UTF-8');

                    $page->setLineColor(new \Zend_Pdf_Color_Rgb(0,0,0))
                         ->drawLine(40, $yPoint-5, ($page->getWidth()-40), $yPoint-5)
                         ->drawLine(40, $yPoint-18, ($page->getWidth()-40), $yPoint-18);

                    $page->setFont($font, 10)
                         ->drawText('Fecha'            , 40 , $yPoint-15)
                         ->drawText('Inicio'           , 110, $yPoint-15)
                         ->drawText('Fin'              , 170, $yPoint-15)
                         ->drawText('Entrada'          , 230, $yPoint-15)
                         ->drawText('Salida'           , 290, $yPoint-15)
                         ->drawText('Horas programadas', 350, $yPoint-15)
                         ->drawText('Horas cumplidas'  , 455, $yPoint-15);

                    $yPoint=$yPoint-30;
                }
            }
            //Salto de pagina, agregar tambien || (($materia!=$reporte['materia'])&& $yPoint)?
            if($yPoint < 90 ){
                //Nueva pagina
                $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4); //'595:842:'
                //Agregar pagina al pdf
                $pdf->pages[] = $page;
                $yPoint=800;
                $currentPage++;
            }
            //Encabezado para cualquier pagina que no sea la primera
            if($currentPage>1 && $yPoint==800){

                $page->setLineColor(new \Zend_Pdf_Color_Rgb(0,0,0))
                     ->drawLine(40, 795, ($page->getWidth()-40), 795)
                     ->drawLine(40, 782, ($page->getWidth()-40), 782);

                $page->setFont($font2, 10)
                     ->drawText(strtoupper($materia), 40 , 800, 'UTF-8');

                $page->setFont($font, 10)
                     ->drawText('Fecha'            , 40 , 785)
                     ->drawText('Inicio'           , 110, 785)
                     ->drawText('Fin'              , 170, 785)
                     ->drawText('Entrada'          , 230, 785)
                     ->drawText('Salida'           , 290, 785)
                     //->drawText('Horas cátedra', 350, 785, 'UTF-8');
                     ->drawText('Horas programadas', 350, 785)
                     ->drawText('Horas cumplidas'  , 455, 785);

                $yPoint=770;
            }
            if($reporte['tiene'] > $reporte['hizo']){
                $obs = true;
                $dFont = $font2;
            }
            else{
                $dFont = $font;
            }
            $fecha = date('d/m/Y', strtotime($reporte['fecha']));
            $page->setFont($dFont, 10)
                 ->drawText($fecha             , 40, $yPoint)
                 ->drawText($reporte['inicio'] , 110, $yPoint)
                 ->drawText($reporte['fin']    , 170, $yPoint)
                 ->drawText($reporte['entrada'], 230, $yPoint)
                 ->drawText($reporte['salida'] , 290, $yPoint)
                 ->drawText($reporte['tiene']  , 350, $yPoint)
                 ->drawText($reporte['hizo']   , 455, $yPoint);

            $yPoint=$yPoint-15;
            $totalCumplidas   = $totalCumplidas+$reporte['hizo'];
            $totalProgramadas = $totalProgramadas+$reporte['tiene'];
        }

        $page->setLineColor(new \Zend_Pdf_Color_Rgb(0,0,0))
             ->drawLine(40, $yPoint+5, ($page->getWidth()-40), $yPoint+5)
             ->drawLine(40, $yPoint-8, ($page->getWidth()-40), $yPoint-8);

        $page->setFont($font2, 10)
             ->drawText('TOTAL DE HORAS CATEDRA : ', 40, $yPoint-5)
             ->drawText($totalProgramadas  , 350, $yPoint-5)
             ->drawText($totalCumplidas    , 455, $yPoint-5);

        $yPoint=$yPoint-20;
        if($yPoint < 90 ){
            //Nueva pagina
            $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4); //'595:842:'
            //Agregar pagina al pdf
            $pdf->pages[] = $page;
            $yPoint=800;
            $currentPage++;
        }

        if($obs){
           $mensaje  = "ATENCION: No se ha cumplido con la cantidad de horas programadas. Tenga en cuenta que proximamente";
           $mensaje1 = "se liquidará conforme el resultado de este reporte. Si el reporte le parece incorrecto, por favor solicite un";
           $mensaje2 = "reporte de marcaciones.";

           $page->setFont($font2, 10)
             ->drawText($mensaje , 40, $yPoint-5,  'UTF-8')
             ->drawText($mensaje1, 40, $yPoint-15, 'UTF-8')
             ->drawText($mensaje2, 40, $yPoint-25, 'UTF-8');
        }

        $page->setFont($font, 10);

        //Numerar paginas
        $pageNumber=1;
        foreach($pdf->pages as $p){
            $p->drawText($pageNumber++,  550, 40);
        }

        // Guardar el pdf
        //$fileName = 'ReporteAsistencia'.$profesor.'.pdf';
        $fileName = 'ReporteAsistencia.pdf';
        $pdf->save($fileName);

        X\Msg::Success('El reporte se ha generado con éxito.');

    }

    public function pdfAction(){

          $pdf = Zend_Pdf::load('ReporteAsistencia.pdf');

          $this->getResponse()->setHeader('Content-type', 'application/x-pdf', true);
          $this->getResponse()->setHeader('Content-disposition', "filename=ReporteAsistencia.pdf", true);
          $this->getResponse()->setBody($pdf->render());
     }


}

